import express from "express";
import CharactersData from "./model.js";
import auth from "../token/auth.js";
import User from "../user/model.js";

const router = express.Router();

// 创建
router.post("/", auth, async (req, res) => {
  const { operatorId, ...characterFields } = req.body;
  if (!operatorId) {
    return res.status(400).json({ error: "缺少操作者id" });
  }
  // 查询操作者身份
  const operator = await User.findById(operatorId);
  if (!operator || !["社长", "管理员"].includes(operator.position)) {
    return res.status(403).json({ error: "只有社长或管理员可以创建数据" });
  }
  try {
    const character = await CharactersData.create(characterFields);
    res.status(201).json(character);
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
});

// 查询全部
router.get("/", async (req, res) => {
  try {
    const list = await CharactersData.find().sort({ sortByNumber: 1 });
    res.json(list);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// 查询单个
router.get("/:id", auth, async (req, res) => {
  try {
    const character = await CharactersData.findById(req.params.id);
    if (!character) return res.status(404).json({ error: "未找到" });
    res.json(character);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// 根据用户id查询所有
router.get("/user/:userId", auth, async (req, res) => {
  const { userId } = req.params;
  try {
    const characters = await CharactersData.find({ userId });
    res.json(characters);
  } catch (err) {
    res.status(500).json({ error: "查询失败" });
  }
});

// 更新
router.put("/:id", auth, async (req, res) => {
  const { operatorId, ...updateFields } = req.body;
  if (!operatorId) {
    return res.status(400).json({ error: "缺少操作者id" });
  }
  // 查询操作者身份
  const operator = await User.findById(operatorId);
  if (!operator || !["社长", "管理员"].includes(operator.position)) {
    return res.status(403).json({ error: "只有社长或管理员可以修改数据" });
  }
  try {
    const character = await CharactersData.findByIdAndUpdate(
      req.params.id,
      updateFields,
      { new: true }
    );
    if (!character) return res.status(404).json({ error: "未找到" });
    res.json({ message: "更新成功", character });
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
});

// 删除
router.delete("/:id", auth, async (req, res) => {
  const { operatorId } = req.body;
  if (!operatorId) {
    return res.status(400).json({ error: "缺少操作者id" });
  }
  // 查询操作者身份
  const operator = await User.findById(operatorId);
  if (!operator || !["社长", "管理员"].includes(operator.position)) {
    return res.status(403).json({ error: "只有社长或管理员可以删除数据" });
  }
  try {
    const character = await CharactersData.findByIdAndDelete(req.params.id);
    if (!character) return res.status(404).json({ error: "未找到" });
    res.json({ message: "删除成功" });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

export default router;
